350. 两个数组的交集 II
350. 两个数组的交集 II
分析
这个题跟 349. 两个数组的交集 几乎如出一辙,思路上也没什么差别,具体思路看 349 题即可。
需要修改的地方:
- 统计 nums1、nums2 的数字出现的次数的时候,重复数字,计数得累加
- 在检查 nums1、nums2 的数字统计结果的时候,如果两个次数都大于 0,那么得再先找到小的那个次数,然后用 for 循环遍历插入到结果中。
解题
public int[] intersect(int[] nums1, int[] nums2) {
int shortLength = nums1.length > nums2.length ? nums2.length : nums1.length;
int[] result = new int[shortLength];
int resultIndex = 0;
int[] number1Count = new int[1001];
for (int i = 0; i < nums1.length; i++) {
int index = nums1[i];
number1Count[index]++;
}
int[] number2Count = new int[1001];
for (int i = 0; i < nums2.length; i++) {
int index = nums2[i];
number2Count[index]++;
}
for (int i = 0; i < 1001; i++) {
if (number1Count[i] > 0 && number2Count[i] > 0) {
int miniLength = number1Count[i] > number2Count[i] ? number2Count[i] : number1Count[i];
for (int j = 0; j < miniLength; j++) {
result[resultIndex] = i;
resultIndex++;
}
}
}
int[] finalResult = new int[resultIndex];
for (int i = 0; i < resultIndex; i++) {
finalResult[i] = result[i];
}
return finalResult;
}